#!/usr/bin/perl

sub checkVersion;
sub checkdriverVersion;
sub installationCheck;

sub checkVersion
{
    my $version         = $_[0];
    my $operator        = $_[1];
	my $plist = "/System/Library/CoreServices/SystemVersion.plist";
	my $key = "ProductVersion";

	if (!$version) {
		return 0;
	}

    if ( -f $plist && (open my $fd, "$plist") )
    {
		my $plistData = "";
		{
			local $/;
			$plistData = <$fd>;
		}
		close $fd;

		if (!$operator) {
			$operator = ">=";
		}

 	   if ( $plistData =~ /^.*?<key>${key}<\/key>.*?<string>(.*?)<\/string>.*$/s )
 	   {
			@systemVersion = split /\./, $1;
			@incommingVersion = split /\./, $version;

			my $actualVersion;
		
			for ($i = 0; $i < 3; $i++)
			{
				if(!$systemVersion[$i])
				{
					$systemVersion[$i] = 0;
				}
				if (($incommingVersion[$i] != $systemVersion[$i]) || ($i == 2))
				{
					$actualVersion = $systemVersion[$i];
					$version = $incommingVersion[$i];
					last;
				}
			}

			return 0 if( eval ("$actualVersion " . $operator . " $version") );
 	   }
    }

	return 1;
}

sub checkdriverVersion
{
    my $version1         = $_[0];
    my $operator1        = $_[1];
	my $plist1 = "/System/Library/PreferencePanes/ACTIVboard.prefPane/Contents/Info.plist";
	my $key1 = "CFBundleVersion";
	
	if ( ! -f $plist1 ) {
		return 0;
	}  
					
	if (!$version1) {
		return 0;
	}
    if ( -f $plist1 && (open my $fd, "$plist1") )
    {		
		my $plistData1 = "";
		{
			local $/;
			$plistData1 = <$fd>;
		}
		close $fd;

		if (!$operator1) {
			$operator1 = "<=";
		}

 	   if ( $plistData1 =~ /^.*?<key>${key1}<\/key>.*?<string>(.*?)<\/string>.*$/s )
 	   {
			$_ = $1;
			if (/Build/)
			{
				$_ =~ s/Build/./;
				$_ =~ s/ //g;			
			}
			
			@systemVersion1 = split /\./, $_;
			@incommingVersion1 = split /\./, $version1;	
			
			my $actualVersion1;
		
			for ($i = 0; $i < 3; $i++)
			{
				if(!$systemVersion1[$i])
				{
					$systemVersion1[$i] = 0;
				}
				if (($incommingVersion1[$i] != $systemVersion1[$i]) || ($i == 2))
				{
					$actualVersion1 = $systemVersion1[$i];
					$version1 = $incommingVersion1[$i];
					last;
				}
			}
			return 0 if( eval ("$actualVersion1 " . $operator1 . " $version1") );
 	   }
    }
	return 1;
}


sub installationCheck
{
	if ( checkVersion("10.4.0") )
	{
		return ((1 << 6) + (1 << 5) + 16);
		
	} elsif ( checkdriverVersion("5.2.7") ) {
	
		return ((1 << 6) + (1 << 5) + 17);
	
	} else {	

	return 0;
	}
}

exit installationCheck(@ARGV);